The inventive concepts related to data storage systems and, more particularly, to the handling of Non-Volatile Memory express (NVMe) reservations in data storage systems.
Capacity, performance and power requirements associated with digital data storage devices continue to challenge computing systems such as data processing systems and communications systems. A solid state drive (SSD) is a high performance storage device that is used for data storage purposes. SSDs are much faster, and typically include a controller to manage the data storage. The controller manages operations of the SSD, including data storage and access as well as communication between the SSD and a host device.
Non-Volatile Memory Host Controller Interface Specification (NVMHCI) or Non-Volatile Memory Express (NVMe) is an interface standard that deals with local non-volatile memory access. NVMe is a register level interface that allows host software to communicate with a nonvolatile memory subsystem. This interface is optimized for enterprise and client SSDs. NVMe provides a direct Input/Output (I/O) access to the local non-volatile memory. NVMe helps to reduce latency of read and write operations.
In an enterprise storage market, multi-path and virtualization are two vital features in storage devices to share data among multiple host entities. While the data sharing feature allows multiple hosts to access the data as and when required, the same rises data security concerns as well. In the shared usage scenarios, an adequate mechanism(s) needs to be provided to protect the shared data, without affecting normal operations of the system. NVMe specification provides a mechanism known as “Reservations”, to protect the shared resources. Reservations provide capabilities that may be utilized by two or more hosts to have coordinated access to a shared namespace. A reservation on a namespace for a host restricts the host's access to that namespace. If a host submits a command to access a particular namespace, in the presence of a reservation, the command is verified in the light of defined permissions, and accordingly, access to the requested shared namespace is provided or denied. Lack of access to a shared namespace is treated as a ‘Reservation Conflict’. Capabilities are provided to allow recovery from a reservation held by a failing or uncooperative host.